"""
使用Thread对象的Lock和Rlock可以实现简单的线程同步, 这两个对象都有acquire方法和release方法。
对于多线程需要每次只允许一个线程操作数据, 可以将其操作放到acquire和release方法之间。

lock = threading.Lock()
lock.acquire()  # 阻塞
......
lock.release()  # 释放锁
只要不释放, 其他的线程都无法进入运行
"""

import threading
import time

lock = threading.Lock()
list1 = [0] * 10


def task1():
    # 获取线程锁, 如果已经上锁了, 等待锁的释放
    lock.acquire()  # 阻塞
    for i in range(len(list1)):
        list1[i] = 1
        time.sleep(0.5)
    lock.release()  # 释放锁


def task2():
    lock.acquire()  # 阻塞
    for i in range(len(list1)):
        print('---->', i)
        time.sleep(0.5)
    lock.release()


if __name__ == '__main__':
    t1 = threading.Thread(target=task1)
    t2 = threading.Thread(target=task2)

    t1.start()
    t2.start()

    t1.join()
    t2.join()
    print(list1)
